import request from '../utils/request';
import axios from 'axios';
import { useUserStore } from '../store/user';

/**
 * 获取题目列表
 */
export async function fetchProblemList(params: {
  pageNum: number;
  pageSize: number;
  difficulty?: string | null;
  tag?: string | null;
  sortBy: string;
  orderBy: string;
}) {
  try {
    // 使用项目中的request函数（已配置好的工具，它会自动处理token）
    const result = await request('/problem/list', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(params)
    });
    
    return result;
  } catch (error) {
    console.error('Failed to fetch problem list:', error);
    throw error;
  }
}

/**
 * 获取题目详情
 */
export async function getProblemDetail(id: number) {
  try {
    const result = await request(`/problem/getInfo/${id}`, {
      method: 'GET'
    });
    
    return result;
  } catch (error) {
    console.error('Failed to fetch problem detail:', error);
    throw error;
  }
}

/**
 * 按标题搜索题目
 */
export async function searchProblemByTitle(params: {
  pageNum: number;
  pageSize: number;
  title: string;
}) {
  try {
    // 使用项目中的request函数（已包含token处理）
    const result = await request('/problem/listByTitle', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(params)
    });
    
    return result;
  } catch (error) {
    console.error('Failed to search problems by title:', error);
    throw error;
  }
}

/**
 * 保存用户做题记录
 */
export async function saveUserRecord(record: {
  uid: number;
  pid: number;
  massage: string;
  runtime: number;
  memory: number;
  code: string;
  language: string;
  scoreAverage?: number;
}) {
  try {
    const result = await request('/problem/saveRecode', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(record)
    });
    
    return result;
  } catch (error) {
    console.error('Failed to save user record:', error);
    throw error;
  }
}

/**
 * 获取最新题目ID
 * 当上传题目后，服务器响应为null时使用
 */
export async function getLatestProblemId() {
  try {
    // 获取题目列表，按ID降序排序，获取第一个（最新的）
    const result = await request('/problem/list', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        pageNum: 1,
        pageSize: 1,
        sortBy: 'id',
        orderBy: 'desc'
      })
    });
    
    // 如果响应正确且有记录
    if (result && result.data && result.data.records && result.data.records.length > 0) {
      return result.data.records[0].id;
    }
    
    return null;
  } catch (error) {
    console.error('Failed to get latest problem ID:', error);
    return null;
  }
}

/**
 * 获取下一个可用题目ID（基于题目总数）
 */
export async function getNextProblemId() {
  try {
    // 获取题目列表，主要是为了获取total属性
    const result = await request('/problem/list', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        pageNum: 1,
        pageSize: 1,
        sortBy: 'id',
        orderBy: 'desc'
      })
    });
    
    // 如果响应正确且有total属性
    if (result && result.data && typeof result.data.total === 'number') {
      // 使用题目总数+1000作为起始ID
      // 这样可以确保ID是连续的，并且有足够的空间
      const nextId = 1000 + result.data.total;
      console.log('基于题目总数计算的下一个ID:', nextId);
      return nextId;
    }
    
    // 如果无法获取total，尝试获取最新ID
    const latestId = await getLatestProblemId();
    if (latestId !== null) {
      return latestId + 1;
    }
    
    // 如果以上都失败，使用安全的默认值
    return 1000;
  } catch (error) {
    console.error('Failed to get next problem ID:', error);
    return 1000; // 失败时返回一个安全的默认值
  }
}